//
// Created by martin on 7/10/21.
//
#ifndef _GNU_SOURCE
#define _GNU_SOURCE 1
#endif

#include "utils.h"
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <unistd.h>


/**
 * 打印应用程序路径
 */
void pr_apppath()
{
    char str[_POSIX_PATH_MAX];
    char buf[_POSIX_PATH_MAX];

    pid_t pid = getpid();
    snprintf(str, sizeof(str), "/proc/%d/exe", pid);
    if (readlink(str, buf, sizeof(buf)) < 0) { /* 读取链接文件得到 启动程序位置 */
        perror("readlink error");
        return;
    }

    printf("current startup location: %s\n", buf);
}

/**
 * 打印当前工作目录
 * @note 非线程安全
 */
void pr_currentdir()
{
    char *s = get_current_dir_name();
    if (s == NULL) {
        perror("get_current_dir_name error");
        return;
    }

    printf("current directory name: %s\n", s);
    free(s);
}

/**
 * 打印当前工作目录
 * @note 线程安全
 */
void pr_currentdir_r()
{
    char buf[_POSIX_PATH_MAX];

    if (NULL == getcwd(buf, sizeof(buf))) { /* 当前工作目录 */
        perror("getcwd error");
        exit(1);
    }
    printf("current working directory: %s\n", buf);
}
